require('dotenv').config();
const db = require('../models');
const logger = require('../utils/logger');

const { Category, Tag, Lesson, LessonTag, CodeExample } = db;

// 分类数据
const categoriesData = [
  // 主分类
  {
    name: '快速开始',
    slug: 'getting-started',
    description: 'Cursor AI 基础入门教程',
    icon: 'rocket',
    color: '#10b981',
    sortOrder: 1,
    parentId: null
  },
  {
    name: '核心功能',
    slug: 'core-features',
    description: 'Cursor 核心功能详解',
    icon: 'star',
    color: '#3b82f6',
    sortOrder: 2,
    parentId: null
  },
  {
    name: '进阶技巧',
    slug: 'advanced-tips',
    description: '高级使用技巧和最佳实践',
    icon: 'lightning',
    color: '#8b5cf6',
    sortOrder: 3,
    parentId: null
  },
  {
    name: '项目实战',
    slug: 'projects',
    description: '实际项目开发案例',
    icon: 'code',
    color: '#f59e0b',
    sortOrder: 4,
    parentId: null
  },
  {
    name: '开发环境',
    slug: 'development-setup',
    description: '开发环境配置指南',
    icon: 'settings',
    color: '#ef4444',
    sortOrder: 5,
    parentId: null
  },
  {
    name: '常见问题',
    slug: 'faq',
    description: '常见问题解答',
    icon: 'question',
    color: '#6b7280',
    sortOrder: 6,
    parentId: null
  }
];

// 子分类数据（将在主分类创建后添加）
const subCategoriesData = [
  // 快速开始子分类
  {
    name: '安装配置',
    slug: 'installation',
    description: 'Cursor 安装与基础配置',
    parentSlug: 'getting-started',
    sortOrder: 1
  },
  {
    name: '界面介绍',
    slug: 'interface',
    description: 'Cursor 界面功能介绍',
    parentSlug: 'getting-started',
    sortOrder: 2
  },
  {
    name: '从VS Code迁移',
    slug: 'vscode-migration',
    description: '从VS Code无缝迁移到Cursor',
    parentSlug: 'getting-started',
    sortOrder: 3
  },
  // 核心功能子分类
  {
    name: 'Tab补全',
    slug: 'tab-completion',
    description: 'AI代码自动补全功能',
    parentSlug: 'core-features',
    sortOrder: 1
  },
  {
    name: 'Composer',
    slug: 'composer',
    description: '智能代码生成工具',
    parentSlug: 'core-features',
    sortOrder: 2
  },
  {
    name: 'Chat功能',
    slug: 'chat',
    description: 'AI聊天助手使用',
    parentSlug: 'core-features',
    sortOrder: 3
  },
  {
    name: '上下文功能',
    slug: 'context',
    description: '@符号功能详解',
    parentSlug: 'core-features',
    sortOrder: 4
  },
  {
    name: 'Cmd+K',
    slug: 'cmd-k',
    description: '快捷命令功能',
    parentSlug: 'core-features',
    sortOrder: 5
  }
];

// 标签数据
const tagsData = [
  { name: '基础', slug: 'basic', color: '#10b981', description: '基础入门内容' },
  { name: '进阶', slug: 'advanced', color: '#f59e0b', description: '进阶技能内容' },
  { name: '实战', slug: 'practice', color: '#ef4444', description: '实际项目案例' },
  { name: '配置', slug: 'config', color: '#8b5cf6', description: '环境配置相关' },
  { name: 'AI功能', slug: 'ai-features', color: '#06b6d4', description: 'AI智能功能' },
  { name: '快捷键', slug: 'shortcuts', color: '#84cc16', description: '快捷键操作' },
  { name: '最佳实践', slug: 'best-practice', color: '#f97316', description: '开发最佳实践' },
  { name: '前端', slug: 'frontend', color: '#3b82f6', description: '前端开发相关' },
  { name: '后端', slug: 'backend', color: '#6366f1', description: '后端开发相关' },
  { name: '全栈', slug: 'fullstack', color: '#8b5cf6', description: '全栈开发相关' },
  { name: 'Vue', slug: 'vue', color: '#4ade80', description: 'Vue.js框架' },
  { name: 'React', slug: 'react', color: '#60a5fa', description: 'React框架' },
  { name: 'Node.js', slug: 'nodejs', color: '#22c55e', description: 'Node.js后端' },
  { name: 'Python', slug: 'python', color: '#fbbf24', description: 'Python开发' },
  { name: 'JavaScript', slug: 'javascript', color: '#facc15', description: 'JavaScript语言' },
  { name: 'TypeScript', slug: 'typescript', color: '#3b82f6', description: 'TypeScript语言' }
];

// 示例课程数据
const lessonsData = [
  {
    categorySlug: 'installation',
    title: 'Cursor 安装指南',
    slug: 'cursor-installation-guide',
    content: `# Cursor 安装指南

## 系统要求

- Windows 10/11 或 macOS 10.15+ 或 Linux
- 至少 4GB RAM
- 2GB 可用磁盘空间

## 下载安装

1. 访问 [Cursor 官网](https://cursor.sh)
2. 点击下载按钮
3. 选择适合您操作系统的版本
4. 运行安装程序并按照提示完成安装

## 首次启动

安装完成后首次启动 Cursor：

1. 接受使用条款
2. 登录或创建账户
3. 选择主题和基本设置
4. 开始使用！

## 下一步

安装完成后，建议您：
- 熟悉界面布局
- 配置基本设置
- 尝试第一个 AI 代码补全`,
    excerpt: '详细介绍如何在不同操作系统上安装和配置 Cursor AI 编辑器',
    difficulty: 'beginner',
    duration: 15,
    isPublished: true,
    isFeatured: true,
    author: 'Cursor Team',
    tags: ['基础', '配置']
  },
  {
    categorySlug: 'tab-completion',
    title: 'Tab 自动补全功能详解',
    slug: 'tab-completion-guide',
    content: `# Tab 自动补全功能详解

## 什么是 Tab 补全

Tab 补全是 Cursor 的核心 AI 功能之一，它能够：
- 预测您即将编写的代码
- 提供智能代码建议
- 提高编码效率

## 如何使用

1. 开始输入代码
2. 等待 AI 建议出现（灰色文字）
3. 按 Tab 键接受建议
4. 按 Esc 键拒绝建议

## 最佳实践

- 提供清晰的变量命名
- 编写有意义的注释
- 保持代码风格一致

## 高级技巧

- 使用注释指导 AI 生成
- 利用函数签名获得更准确的建议
- 结合其他 Cursor 功能使用`,
    excerpt: '深入了解 Cursor Tab 自动补全功能的使用方法和最佳实践',
    difficulty: 'intermediate',
    duration: 25,
    isPublished: true,
    isFeatured: true,
    author: 'Cursor Team',
    tags: ['AI功能', '进阶']
  }
];

// 代码示例数据
const codeExamplesData = [
  {
    lessonSlug: 'cursor-installation-guide',
    title: '安装验证脚本',
    code: `// 验证 Cursor 安装是否成功
console.log('Hello Cursor!');

// 检查 AI 功能是否可用
function checkAIFeatures() {
  // 输入这行注释后，尝试按 Tab 查看 AI 建议
  // 创建一个计算两个数字和的函数
}`,
    language: 'javascript',
    description: '用于验证 Cursor 安装和 AI 功能的简单脚本',
    fileName: 'verify-installation.js',
    sortOrder: 1,
    isRunnable: true
  },
  {
    lessonSlug: 'tab-completion-guide',
    title: 'Tab 补全示例',
    code: `// 示例：使用 Tab 补全创建一个用户管理类
class UserManager {
  constructor() {
    this.users = [];
  }

  // 尝试输入注释：创建一个添加用户的方法
  // 然后按 Tab 查看 AI 建议
}

// 示例：使用 Tab 补全创建数组操作函数
// 创建一个函数来过滤年龄大于18的用户`,
    language: 'javascript',
    description: '展示如何有效使用 Tab 补全功能的代码示例',
    fileName: 'tab-completion-example.js',
    sortOrder: 1,
    isRunnable: true
  }
];

async function seedDatabase() {
  try {
    logger.info('开始初始化数据库数据...');

    // 清空现有数据，保持表结构不变
    if (process.env.NODE_ENV === 'development') {
      logger.info('清空现有数据...');
      // 按照外键依赖顺序删除数据
      await CodeExample.destroy({ where: {} });
      await LessonTag.destroy({ where: {} });
      await Lesson.destroy({ where: {} });
      await Tag.destroy({ where: {} });
      await Category.destroy({ where: {} });
      logger.info('数据已清空，表结构保持不变');
    }

    // 创建主分类
    logger.info('创建分类数据...');
    const categories = [];
    for (const categoryData of categoriesData) {
      const category = await Category.create(categoryData);
      categories.push(category);
      logger.info(`创建分类: ${category.name}`);
    }

    // 创建子分类
    for (const subCategoryData of subCategoriesData) {
      const parentCategory = categories.find(cat => cat.slug === subCategoryData.parentSlug);
      if (parentCategory) {
        const { parentSlug, ...subData } = subCategoryData;
        const subCategory = await Category.create({
          ...subData,
          parentId: parentCategory.id
        });
        categories.push(subCategory);
        logger.info(`创建子分类: ${subCategory.name}`);
      }
    }

    // 创建标签
    logger.info('创建标签数据...');
    const tags = [];
    for (const tagData of tagsData) {
      const tag = await Tag.create(tagData);
      tags.push(tag);
      logger.info(`创建标签: ${tag.name}`);
    }

    // 创建课程
    logger.info('创建课程数据...');
    const lessons = [];
    for (const lessonData of lessonsData) {
      const category = categories.find(cat => cat.slug === lessonData.categorySlug);
      if (category) {
        const { categorySlug, tags: lessonTags, ...lessonInfo } = lessonData;
        const lesson = await Lesson.create({
          ...lessonInfo,
          categoryId: category.id
        });

        // 添加标签关联
        if (lessonTags && lessonTags.length > 0) {
          const tagObjects = tags.filter(tag => lessonTags.includes(tag.name));
          await lesson.setTags(tagObjects);
          
          // 更新标签使用次数
          for (const tag of tagObjects) {
            await tag.increment('usageCount');
          }
        }

        lessons.push(lesson);
        logger.info(`创建课程: ${lesson.title}`);
      }
    }

    // 创建代码示例
    logger.info('创建代码示例数据...');
    for (const exampleData of codeExamplesData) {
      const lesson = lessons.find(l => l.slug === exampleData.lessonSlug);
      if (lesson) {
        const { lessonSlug, ...exampleInfo } = exampleData;
        const codeExample = await CodeExample.create({
          ...exampleInfo,
          lessonId: lesson.id
        });
        logger.info(`创建代码示例: ${codeExample.title}`);
      }
    }

    logger.info('数据库初始化完成！');
    logger.info(`创建了 ${categories.length} 个分类`);
    logger.info(`创建了 ${tags.length} 个标签`);
    logger.info(`创建了 ${lessons.length} 个课程`);
    logger.info(`创建了 ${codeExamplesData.length} 个代码示例`);

  } catch (error) {
    logger.error('数据库初始化失败:', error);
    throw error;
  }
}

// 如果直接运行此脚本
if (require.main === module) {
  seedDatabase()
    .then(() => {
      logger.info('数据初始化成功完成');
      process.exit(0);
    })
    .catch((error) => {
      logger.error('数据初始化失败:', error);
      process.exit(1);
    });
}

module.exports = seedDatabase; 